﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Drawing;
using Crosland.Automotriz.Logic.Linq;
using System.Net.Mail;
using Crosland.Automotriz.Facade.Facade;
using Crosland.Automotriz.Facade.Interface;
using System.Configuration;
using Crosland.Automotriz.Logic.ControlExeption;
using DevExpress.Web.ASPxGridView;
using Crosland.Automotriz.Logic;
using DevExpress.Web.ASPxEditors;
namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmPronosticoImportacion : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        clsSolicitudAprobacionLogic SolicitudLogic = new clsSolicitudAprobacionLogic();

        iFacadePronosticoImportacion BL_PronosticoImportacion = new FacadePronosticoImportacion();
        iFacadeAprobarPronostico BL_AprobarPronostico = new FacadeAprobarPronostico();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);             
                this.listarEstado();              
 
                this.ListarPrimerNivel();
                this.FiltroSeleccionado();
                this.cargarGrilla_cabecera();
            }
        
        }


        private void FiltroSeleccionado() {

            try
            {
               if( Session["indexFocus"]!=null){dgPedido.FocusedRowIndex=Convert.ToInt32(Session["indexFocus"]);}
               if (Session["cboAnio"] != null) { cboAnio.Value = Session["cboAnio"].ToString(); } else { cboAnio.Value = Convert.ToString(DateTime.Now.Year); }
               if (Session["cboEstado"] != null) { cboEstado.Value = Session["cboEstado"].ToString(); } else { cboEstado.Value = "0".ToString(); }

            }
            catch (Exception ex)
            {

                lblmsj.Text = ex.Message;
                popupmsj2.ShowOnPageLoad = true;
                return;
            }
        
        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException e)
            {
                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }
        }

        void listarEstado()
        {
            try
            {
                clsTd_EstadoLogic estadoLogic = new clsTd_EstadoLogic();

                cboEstado.DataSource = estadoLogic.listar();
                cboEstado.ValueField = "ID_ESTADO";
                cboEstado.TextField = "NOM_ESTADO";
                cboEstado.DataBind();

            }
            catch (RunException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "listarEstado");
                MensajesError(ex.Message, ex, "listarEstado");
            }
        }

        void cargarGrilla_cabecera()
        {
            try
            {
                dgPedido.DataSource = BL_PronosticoImportacion.listar_cabecera(Convert.ToInt32(cboAnio.Value), Convert.ToInt32(cboEstado.Value));
                dgPedido.DataBind();

            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "cargarGrilla_cabecera");
                MensajesError(ex.Message, ex, "cargarGrilla_cabecera");

            }
            catch (Crosland.Automotriz.Logic.ControlExeption.RunException ex)
            {

                GuardarExceptionLog(ex.Message, ex, "cargarGrilla_cabecera");
                MensajesError(ex.Message, ex, "cargarGrilla_cabecera");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "cargarGrilla_cabecera");
                MensajesError("Error en la aplicación", ex, "cargarGrilla_cabecera");
            }
        }
        
        void ListarPrimerNivel()
        {
            try
            {
                
                cboPrimerNivel.DataSource = BL_PronosticoImportacion.listarSolicitudPrimer();
                cboPrimerNivel.ValueField = "idMae";
                cboPrimerNivel.TextField = "nombres";
                cboPrimerNivel.DataBind();
            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "ListarPrimerNivel");
                MensajesError("Error en la aplicación", ex, "ListarPrimerNivel");
            }
        }
        
        protected void dgPedido_PageIndexChanged(object sender, EventArgs e)
        {
            cargarGrilla_cabecera();
        }
              
        protected void btnAprobacionPedido_Click(object sender, ImageClickEventArgs e)
        {
            this.AprobarPedido();

        }
       
        private void AprobarPedido()
        {
            try
            {
                ActualizarPedidoLogic act_Estado = new ActualizarPedidoLogic();

                if (BL_AprobarPronostico.Actualiza_Estado((Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" }), 1))
                {
                    cargarGrilla_cabecera();
                }

            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "AprobarPedido");
                MensajesError("Error en la aplicación", ex, "AprobarPedido");
            }
        }

        protected void btnAnularPedido_Click(object sender, ImageClickEventArgs e)
        {
            this.AnularPedido();
        }

        private void AnularPedido()
        {
            try
            {
                ActualizarPedidoLogic act_Estado = new ActualizarPedidoLogic();
                if (BL_AprobarPronostico.Actualiza_Estado((Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" }), 4))
                {
                    cargarGrilla_cabecera();
                    lblmsj.Text = "Se anuló correctamente.";
                    popupmsj2.ShowOnPageLoad = true;

                }
            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "AnularPedido");
                MensajesError("Error en la aplicación", ex, "AnularPedido");
            }
        }

        protected void btnNuevo1_Click(object sender, EventArgs e)
        {
            int index = dgPedido.FocusedRowIndex;
            Session["indexFocus"] = index;
            Session["cboAnio"] = cboAnio.Value;
            Session["cboEstado"] = cboEstado.Value;
            Session["UrlPagina"] = "wFrmPronosticoImportacionGenerar.aspx";
            Response.Redirect("~/Repuestos/wFrmPronosticoImportacionGenerar.aspx?id=" + idNegocio);
        }

        protected void btnModificar1_Click(object sender, EventArgs e)
        {
             int index = dgPedido.FocusedRowIndex;
            if (index == -1)
            {
                lblmsj.Text = "Seleccione un registro a modificar";
                popupmsj2.ShowOnPageLoad = true;
                return;
            }

           
            Session["indexFocus"] = index;
            Session["cboAnio"] = cboAnio.Value;
            Session["cboEstado"] = cboEstado.Value;
            Session["nro_pronostico"] = Convert.ToInt32(dgPedido.GetRowValues(index, "NRO_PRONOSTICO"));
            Session["peri_sal"] = Convert.ToInt32(dgPedido.GetRowValues(index, "peri_sal"));
            Session["ANO_MES_INI"] = Convert.ToString(dgPedido.GetRowValues(index, "ANO_MES_INI"));
            Session["ANO_MES_FIN"] = Convert.ToString(dgPedido.GetRowValues(index, "ANO_MES_FIN"));
            Session["ANO_INI"] = Convert.ToInt32(dgPedido.GetRowValues(index, "ANO_INI"));
            Session["ANO_FIN"] = Convert.ToInt32(dgPedido.GetRowValues(index, "ANO_FIN"));
            Session["FECHA_GEN"] = Convert.ToDateTime(dgPedido.GetRowValues(index, "FECHA_GEN"));
            Session["page_origen"] = "wFrmPronosticoImportacion.aspx";
            int intIdEstado=Convert.ToInt32(dgPedido.GetRowValues(index,"ID_ESTADO"));

            if (intIdEstado == 0)
            {
                Response.Redirect("~/Repuestos/wFrmPronosticoImportacionActualizar.aspx?id=" + idNegocio);
            }
            else {

                Response.Redirect("~/Repuestos/wFrmPronosticoImportacionAprobacionListarDetalle.aspx?id=" + idNegocio);
            }
           
        }

        private void solitactarAprobacion()
        {

            try
            {



                if (BL_AprobarPronostico.Actualiza_Estado((Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" }), 1))
                {
                    this.EnvioCorreo("solicitado  para aprobación", "solicitado", txtobservacion, "A");
                    cargarGrilla_cabecera();

                    lblmsj.Text = "Solicitado de forma satisfactoria";
                    popupmsj2.ShowOnPageLoad = true;


                }
                else
                {
                    lblmsj.Text = "Error al solicitar";
                    popupmsj2.ShowOnPageLoad = true;
                }


            }
            catch (Exception ex)
            {
                lblmsj.Text = "Error al solicitar : " + ex.Message;
                popupmsj2.ShowOnPageLoad = true;

            }
        }

        private MailMessage mail = new MailMessage();

        private void EnvioCorreo(String strTextAprobadoRechazado, String strTextApruebaRechaza, ASPxMemo ControlObservacion, String opAR)
        {
            int intIndex = dgPedido.FocusedRowIndex;
            if (intIndex == -1)
            {
                return;
            }
            clsUsuarioBL usu = new clsUsuarioBL();

            String strCorreoPrimerNivel = BL_PronosticoImportacion.ObtieneCorreoUsuario(cboPrimerNivel.Value==null?"":cboPrimerNivel.Value.ToString());

            String strUsuario = dgPedido.GetRowValues(intIndex, "USER_NEW").ToString();
            List<Crosland.Automotriz.Core.V_Usuario> x = usu.listaUsuario(strUsuario);
            if (x != null)
            {
                String strCorreoSolicitante = opAR == "A" ? strCorreoPrimerNivel : x[0].DES_EMAIL.ToString();
                String strNombreApellidoSolicitante = opAR == "A" ? cboPrimerNivel.Text : cboPrimerNivel.Text;
                String strNroPronostico = dgPedido.GetRowValues(intIndex, "NRO_PRONOSTICO").ToString();

                List<Crosland.Automotriz.Core.V_Usuario> l = usu.listaUsuario(Session["User"].ToString());
                if (l != null)
                {
                    String strNombreAprobado = l[0].DES_NOMBRE.ToString() + ' ' + l[0].DES_APELLIDOS.ToString() + ",";
                    String strCorreoAprobado = l[0].DES_EMAIL.ToString();
                    String strAsunto = "Solicitud de aprobación de pronóstico de importación Nro. " + strNroPronostico;
                    String htmBody = String.Format(HtmlEmail.EnvioCorreoPronosticoAprobacion, strNombreApellidoSolicitante, strNroPronostico + " ha sido " + strTextAprobadoRechazado, strNombreAprobado + " usuario que ha solicitado la aprobación del pronóstico de importación. ", ControlObservacion.Text == "" ? "No existen comentarios" : ControlObservacion.Text);


                    mail.From = new MailAddress(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["UserNameSMTP"]);
                    mail.To.Add(strCorreoPrimerNivel);
                    mail.CC.Add(strCorreoAprobado);
                   // mail.CC.Add(Convert.ToString(cboSegundoNivel.SelectedItem.Value));
                    mail.Subject = (strAsunto);
                    mail.Body = (htmBody);
                    mail.IsBodyHtml = true;
                    mail.Priority = MailPriority.Normal;
                    SmtpClient s = new SmtpClient();
                    s.Host = ConfigurationManager.AppSettings["EmailServer"];
                    s.Port = 25;
                    s.EnableSsl = false;
                    s.UseDefaultCredentials = false;
                    s.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["PasswordSMTP"]);
                    s.Send(mail);
                }
            }
        }
        
        protected void btnSalir1_Click(object sender, EventArgs e)
        {
            Session["indexFocus"] = null;
            Session["cboAnio"] = null;
            Session["cboEstado"] = null;
            Session["nro_pronostico"] = null;
            Session["peri_sal"] = null;
            Session["ANO_MES_INI"] = null;
            Session["ANO_MES_FIN"] = null;
            Session["ANO_INI"] = null;
            Session["ANO_FIN"] = null;
            Session["FECHA_GEN"] = null;
            Session["page_origen"] = null;
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {

            if (cboPrimerNivel.Text == string.Empty )
            {


                lblmsj.Text = "Seleccione un primer nivel";
                popupmsj2.ShowOnPageLoad = true;

            }
           
            else
            {
                int nroPronostico = (Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" });

                string idUsuario = cboPrimerNivel.Value.ToString();

                BL_PronosticoImportacion.UpdateAprobacion("A", nroPronostico, idUsuario);

                this.solitactarAprobacion();
                cboPrimerNivel.Text = String.Empty;
                this.txtobservacion.Text = string.Empty;
            }


        }

        protected void btnfiltrar2_Click(object sender, EventArgs e)
        {
            this.cargarGrilla_cabecera();
        }

        protected void btnanulacion_Click(object sender, EventArgs e)
        {


        }



        protected void btnPopAceptar_Click(object sender, EventArgs e)
        {
            if (Convert.ToString(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO")) == "")
            {
                lblmsj.Text = "Seleccione un registro.";
                popupmsj2.ShowOnPageLoad = true;

            }
            else
            {

                if (BL_AprobarPronostico.Actualiza_Estado((Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" }), 4))
                {
                    cargarGrilla_cabecera();
                    lblmsj.Text = "Se anuló correctamente.";
                    popupmsj2.ShowOnPageLoad = true;
                }
                else
                {
                    cargarGrilla_cabecera();
                    lblmsj.Text = "Error al anular";
                    popupmsj2.ShowOnPageLoad = true;
                }

            }
        }

        protected void btnAceptarReporte_Click(object sender, EventArgs e)
        {
            if (cbotipoReporte.SelectedIndex == 0)
            {
                string script = "urlABC();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "popup", script, true);
            }
            else
            {
                string script = "urlModelo();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "popup", script, true);
            }
        }

        protected void btnAprobacion1_Click(object sender, EventArgs e)
        {
            txtobservacion.Text = string.Empty;
            int intIndex = dgPedido.FocusedRowIndex;
            if (intIndex == -1) {
                lblmsj.Text = "Seleccione un registro por favor.";
                popupmsj2.ShowOnPageLoad = true;
                return;
            
            }
            int intIdEstado=Convert.ToInt32(dgPedido.GetRowValues(intIndex,"ID_ESTADO"));
            String strDesEstado=dgPedido.GetRowValues(intIndex,"NOM_ESTADO").ToString();
            if (intIdEstado == 0)
            {
                PopupCorreo.HeaderText = "Solicitud de aprobación de pronóstico Nro: " + dgPedido.GetRowValues(intIndex, "NRO_PRONOSTICO");                
                PopupCorreo.ShowOnPageLoad = true;
                cboPrimerNivel.Text = String.Empty;
                return;
            }
            else
            {
                lblmsj.Text = "No se puede solicitar aprobación por que el estado es : "+ strDesEstado;
                popupmsj2.ShowOnPageLoad = true;
                return;
            }
        }

        protected void btnAnalizar1_Click(object sender, EventArgs e)
        {
            try
            {
                Session["nro_pronostico"] = dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO").ToString();
                Response.Redirect("~/Repuestos/wFrmPronosticoImportacionReport.aspx?id=" + idNegocio);
            }
            catch
            { }

        }

        protected void btAnanular1_Click(object sender, EventArgs e)
        {
            if (dgPedido.VisibleRowCount == 0)
            {
                lblmsj.Text = "Seleccione un registro";
                popupmsj2.ShowOnPageLoad = true;
            }
            else
            {
                string script = "ShowPopupMsjConfirmacion();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
            }

        }

        protected void dgPedido_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            cargarGrilla_cabecera();
        }

        protected void grdPronosticoParametrosDet_BeforePerformDataSelect(object sender, EventArgs e)
        {
            Session["NRO_PRONOSTICO"] = (sender as ASPxGridView).GetMasterRowKeyValue();
        }
        
        protected void grdGrupoArticulosDet_BeforePerformDataSelect(object sender, EventArgs e)
        {
            Session["NRO_PRONOSTICO"] = (sender as ASPxGridView).GetMasterRowKeyValue();
        }

        protected void btnfiltrar_Click(object sender, EventArgs e)
        {
            this.cargarGrilla_cabecera();
        }

    
    }

}
